<?php

App::uses('AppController', 'Controller');

/**
 * InstituicaoLabs Controller
 *
 * @property InstituicaoLab $InstituicaoLab
 */
class InstituicaoLabsController extends AppController {

    /**
     * index method
     *
     * @return void
     */
    public function index() {
        $this->redirect(array('action' => 'pesquisar'));
    }

    /**
     * view method
     *
     * @throws NotFoundException
     * @param string $id
     * @return void
     */
    public function visualizar($id = null) {
        $instituicao = self::getInstituicaoPorId($id);
        $this->set('arrInstituicao', $instituicao);

        //LISTA DE SERVIÇOS
        $arrServicos = self::getListaServicosInstuticaoPorId($id);
        $this->set('arrServicos',$arrServicos);

        //LISTA RESPONSAVEIS TECNICOS
        $arrRespTecnicos = self::getListaResponsaveisTecnicosInstuticaoPorId($id);
        $this->set('arrRespTecnicos',$arrRespTecnicos);

        //MEDICOS
        $arrMedicos = self::getListaMedicosInstuticaoPorId($id);
        $this->set('arrMedicos',$arrMedicos);

        //CONTATOS
        $arrContatos = self::getListaContatosUnidadePorId($id);
        $this->set('arrContatos',$arrContatos);

    }

    /**
     * add method
     *
     * @return void
     */
    public function cadastrar() {
        try {
            if ($this->request->is('post')) {
$this->request->data['InstituicaoLab']['CD_DIR'] = 1;
                if(!self::validaFormulario($this->request->data)) {
                    return false;
                }
                $dataSource = $this->InstituicaoLab->getDataSource();
                $dataSource->begin();

                $this->InstituicaoLab->create();
                $cdInstituicao = $this->InstituicaoLab->nextVal('CD_INST_LAB');
                $cdInstituicao = !empty($cdInstituicao) ? $cdInstituicao : 1;
                $this->request->data['InstituicaoLab']['CD_INST_LAB'] = $cdInstituicao;
                $this->request->data['InstituicaoLab']['CNPJ_INST_LAB'] = strtr($this->request->data['InstituicaoLab']['CNPJ_INST_LAB'], array('.'=>'','/'=>'','-'=>''));

                unset($this->request->data['InstituicaoLab']['CD_ORE_PROP']);
                unset($this->request->data['InstituicaoLab']['CD_DIR']);
                unset($this->request->data['InstituicaoLab']['IM_FOTO']);

                if ($this->InstituicaoLab->save($this->request->data['InstituicaoLab'], false)) {
                    $this->Session->setFlash(__('Instituição salva com sucesso.'));
                } else {
                    $this->Session->setFlash(__('Ocorreu um erro ao salvar a instituição.'));
                }

                //UPLOAD
                if(!empty($this->request->data['InstituicaoLab']['fotoUsuario']['name'])) {
                    $tmp_nome = $this->request->data['InstituicaoLab']['fotoUsuario']['tmp_name'];
                    self::uploadIMG($tmp_nome, $cdInstituicao);
                }

                $dataSource->commit();

                if (!empty($this->request->data['Telefone'])) {
                    $this->loadModel('Telefone');
                    foreach ($this->request->data['Telefone']['TP_TELEFONE'] as $k => $t) {
                        $tel['CO_TELEFONE'] = $this->Telefone->nextVal('CO_TELEFONE');
                        $tel['CD_INST_LAB'] = $cdInstituicao;
                        $tel['DDD_TELEFONE'] = $this->request->data['Telefone']['DDD_TELEFONE'][$k];
                        $tel['NU_TELEFONE'] = strtr($this->request->data['Telefone']['NU_TELEFONE'][$k], array('-' => ''));
                        $tel['ST_PRINCIPAL'] = (!empty($this->request->data['Telefone']['ST_PRINCIPAL'][$k])) ? $this->request->data['Telefone']['ST_PRINCIPAL'][$k] : 'N';
                        $tel['TP_TELEFONE'] = $this->request->data['Telefone']['TP_TELEFONE'][$k];
                        if (!$this->Telefone->save($tel, false)) {
                            Throw new Exception("Erro ao cadastrar o telefone");
                        }
                    }
                }

                $this->redirect(array('action' => 'index'));
            }
        }catch(Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash(__('Ocorreu um erro ao salvar a instituição.'));
        }
    }

    /**
     * edit method
     *
     * @throws NotFoundException
     * @param string $id
     * @return void
     */
    public function editar($id = null) {
        try {
            if ($this->request->is('post') || $this->request->is('put')) {
$this->request->data['InstituicaoLab']['CD_DIR'] = 1;
                if(!self::validaFormulario($this->request->data)) {
                    $this->redirect(array('action' => 'editar/'.$this->request->data['InstituicaoLab']['CD_INST_LAB']));
                }

                $dataSource = $this->InstituicaoLab->getDataSource();
                $dataSource->begin();

                $this->InstituicaoLab->create();
                $this->InstituicaoLab->primaryKey = 'CD_INST_LAB';
                $this->request->data['InstituicaoLab']['CNPJ_INST_LAB'] = strtr($this->request->data['InstituicaoLab']['CNPJ_INST_LAB'], array('.'=>'','/'=>'','-'=>''));

                unset($this->request->data['InstituicaoLab']['CD_ORE_PROP']);
                unset($this->request->data['InstituicaoLab']['CD_DIR']);
                unset($this->request->data['InstituicaoLab']['IM_FOTO']);

                if ($this->InstituicaoLab->save($this->request->data['InstituicaoLab'], false)) {
                    $this->Session->setFlash(__('Instituição alterada com sucesso.'));
                } else {
                    $this->Session->setFlash(__('Ocorreu um erro ao salvar a instituição.'));
                }

                //UPLOAD
                if(!empty($this->request->data['InstituicaoLab']['fotoUsuario']['name'])) {
                    $tmp_nome = $this->request->data['InstituicaoLab']['fotoUsuario']['tmp_name'];
                    self::uploadIMG($tmp_nome, $this->request->data['InstituicaoLab']['CD_INST_LAB']);
                }

                $dataSource->commit();
                $this->redirect(array('action' => 'index'));
            } else {
                $options = array('conditions' => array('InstituicaoLab.CD_INST_LAB = '. $id));
                $dados = $this->InstituicaoLab->find('first', $options);
                $this->set('dados',$dados);
            }
        }catch(Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash(__('Ocorreu um erro ao salvar a instituição.'));
        }
    }

    public function delete($id = null) {
        try {
            $this->_laytou = false;
            $dataSource = $this->InstituicaoLab->getDataSource();
            $dataSource->begin();

            $arr['CD_INST_LAB'] = $id;
            $arr['ST_INSTITUICAO'] = 'I';
            if(!$this->InstituicaoLab->save($arr)){
                throw new Exception;
            }
            
            $dataSource->commit();
            $this->Session->setFlash(__('Instituição excluída com sucesso.'));
            $this->redirect(array('action' => 'index'));
        }catch(Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash(__('Ocorreu um erro ao excluir a instituição.'));
        }
    }

    public function pesquisar() {
        $this->loadModel('Uf');
        $this->set('arrUF', $this->Uf->getCombo(array('CD_UF', 'NM_UF')));
        $this->loadModel('Cidade');
        $this->set('arrCidade', $this->Cidade->getCombo(array('CD_CID', 'NM_CID')));

        try {
            $parametros['conditions'] = array();
            $i = 0;
            $parametros['conditions'][$i++] =  array('INSTITUICAOLAB.ST_INSTITUICAO = ' => 'A');
            
            if($this->request->is('post')) {
                $parametros = array();

                if(!self::validaPesquisa($this->request->data)) {
                    return false;
                }               

                if (!empty($this->request->data['INSTITUICAO']['NM_INST'])) {
                    $parametros['conditions'][$i++] = array('INSTITUICAOLAB.NM_INST LIKE ' => '%'.$this->request->data['INSTITUICAO']['NM_INST'].'%');
                }
                if (!empty($this->request->data['INSTITUICAO']['NM_INST_CURTO'])) {
                    $parametros['conditions'][$i++] = array('INSTITUICAOLAB.NM_INST_CURTO LIKE ' => '%'.$this->request->data['INSTITUICAO']['NM_INST_CURTO'].'%');
                }
                if (!empty($this->request->data['UF']['CD'])) {
                    $parametros['conditions'][$i++] = array('CIDADE.CD_UF = ' => $this->request->data['UF']['CD']);
                }
                if (!empty($this->request->data['CIDADE']['CD'])) {
                    $parametros['conditions'][$i++] = array('TB_ENDERECO.CD_CID = ' => $this->request->data['CIDADE']['CD']);
                }
                if (!empty($this->request->data['SOLICITACAO']['TIPO'])) {
                    $parametros['conditions'][$i++] = array('TB_SERVICO.TP_SERVICO ' => $this->request->data['SOLICITACAO']['TIPO']);
                }

                $instituicao = self::pesquisarInst($parametros['conditions']);
                $this->set('arrInstituicao', $instituicao);

            }else {
                $instituicao = self::pesquisarInst($parametros['conditions']);
                $this->set('arrInstituicao', $instituicao);
            }
        }  catch (Exception $e) {
            $this->Session->setFlash(__('Ocorreu um erro durante a pesquisa.'));
        }
    }

    public function pesquisarInst($parametros) {
        return $this->InstituicaoLab->find('all', array(
                'joins' => array(
                        array(
                                'table' => 'TB_ENDERECO',
                                'alias' => 'TB_ENDERECO',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'INSTITUICAOLAB.CD_INST_LAB = TB_ENDERECO.CD_INST_LAB'
                                )
                        ),
                        array(
                                'table' => 'CIDADE',
                                'alias' => 'CIDADE',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'TB_ENDERECO.CD_CID = CIDADE.CD_CID'
                                )
                        ),
                        array(
                                'table' => 'RL_SERVICO_INST_LAB',
                                'alias' => 'RL_SERVICO_INST_LAB',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'TB_ENDERECO.CD_INST_LAB = RL_SERVICO_INST_LAB.CD_INST_LAB'
                                )
                        ),
                        array(
                                'table' => 'TB_SERVICO',
                                'alias' => 'TB_SERVICO',
                                'type' => 'LEFT',
                                'conditions' => array(
                                    'RL_SERVICO_INST_LAB.CO_SERVICO = TB_SERVICO.CO_SERVICO'
                                )
                            )
                ),
                'conditions' => $parametros
                ,
                'fields' => array("DISTINCT INSTITUICAOLAB.CD_INST_LAB",
                        "INSTITUICAOLAB.NM_INST",
                        "INSTITUICAOLAB.DS_EMAIL_PRINCIPAL",
                        "INSTITUICAOLAB.DS_EMAIL_SECUNDARIO",
                        "INSTITUICAOLAB.IM_FOTO",
                        "(SELECT CASE TS.TP_SERVICO
                                WHEN 1 THEN 'Coletora'
                                WHEN 2 THEN 'Executora'
                                WHEN 3 THEN 'Solicitante'
                                END as [data()]
                        FROM TB_SERVICO TS
                        WHERE TS.CO_SERVICO = RL_SERVICO_INST_LAB.CO_SERVICO
                        FOR XML PATH('')) as TP_SERVICO	",
                        "(SELECT '('+A.DDD_TELEFONE+')'+A.NU_TELEFONE AS [data()]
                        FROM TB_TELEFONE A
                        WHERE A.CD_INST_LAB = INSTITUICAOLAB.CD_INST_LAB
                        FOR XML PATH('')) as TELEFONES ",
                        "(SELECT B.DS_LOGRADOURO+' '+B.DS_BAIRRO+' '+B.NU_CEP+' '+C.NM_CID+'/'+D.NM_UF AS [data()]
                        FROM TB_ENDERECO B
                        INNER JOIN CIDADE C ON B.CD_CID = C.CD_CID
                        INNER JOIN UF D ON D.CD_UF = C.CD_UF
                        WHERE B.CD_INST_LAB = INSTITUICAOLAB.CD_INST_LAB
                        FOR XML PATH('')) as ENDERECOS ")
                )
        );


    }

    public function validaFormulario(array $dados) {
        if (empty($this->request->data['InstituicaoLab']['NM_INST'])) {
            $this->Session->setFlash(__('O nome é obrigatório.'));
            return false;
        }
        if (empty($this->request->data['InstituicaoLab']['NM_INST_CURTO'])) {
            $this->Session->setFlash(__('O nome curto é obrigatório.'));
            return false;
        }
        if (empty($this->request->data['InstituicaoLab']['CD_UPS_SAI_SUS'])) {
            $this->Session->setFlash(__('CNES é obrigatório.'));
            return false;
        }
        if (empty($this->request->data['InstituicaoLab']['CNPJ_INST_LAB'])) {
            $this->Session->setFlash(__('CNPJ é obrigatório.'));
            return false;
        }
        if (empty($this->request->data['InstituicaoLab']['CD_DIR'])) {
            $this->Session->setFlash(__('Subordinação é obrigatório.'));
            return false;
        }
        if (empty($this->request->data['InstituicaoLab']['DS_EMAIL_PRINCIPAL'])) {
            $this->Session->setFlash(__('Email principal é obrigatório.'));
            return false;
        }

        return true;
    }

    public function validaPesquisa(array $dados) {

        if(!empty($dados['INSTITUICAO']['NM_INST'])) {
            return true;

        }else if(!empty($dados['INSTITUICAO']['NM_INST_CURTO'])) {
            return true;

        }else if(!empty($dados['UF']['CD'])) {
            return true;

        }else if(!empty($dados['CIDADE']['CD'])) {
            return true;

        }else if(!empty($this->request->data['SOLICITACAO']['TIPO'])) {
            return true;

        }else {
            $this->Session->setFlash(__('Informe um parametro para a pesquisa.'));
            return false;
        }

        return true;
    }

    public function uploadIMG($tmp_nome, $cdInstituicao) {
        if (is_uploaded_file($tmp_nome)) {
            $this->InstituicaoLab->query("UPDATE INSTITUICAO_LAB SET IM_FOTO = (SELECT * FROM OPENROWSET(BULK '" . $tmp_nome . "', SINGLE_BLOB) AS A) WHERE CD_INST_LAB = '" . $cdInstituicao . "'");
        } else {
            $this->Session->setFlash("Falha no upload");
        }
    }

    public function dadoscomplementares($id) {
        try {
            $this->layout = false;
            if($this->request->is('post')) {

                $this->loadModel('Endereco');
                $this->loadModel('Telefone');
                $dataSource = $this->Telefone->getDataSource();
                $dataSource->begin();

                if (is_array($this->request->data['Telefone'])) {
                    $this->loadModel('Telefone');
                    foreach ($this->request->data['Telefone'] as $t) {
                        $tel['CO_TELEFONE'] = $this->Telefone->nextVal('CO_TELEFONE');
                        $tel['CD_INST_LAB']     = $id;
                        $tel['DDD_TELEFONE'] = $t['DDD_TELEFONE'];
                        $tel['NU_TELEFONE'] = strtr($t['NU_TELEFONE'], array('-' => ''));
                        $tel['ST_PRINCIPAL'] = (!empty($t['ST_PRINCIPAL'])) ? $t['ST_PRINCIPAL'] : 'N';
                        $tel['TP_TELEFONE'] = $t['TP_TELEFONE'];
                        if (!$this->Telefone->save($tel, false)) {
                            Throw new Exception("Erro ao cadastrar o telefone");
                        }
                    }
                }

                if (!empty($this->request->data['Endereco'])) {
                    foreach ($this->request->data['Endereco']['TP_ENDERECO'] as $k => $t) {
                        $tel['CO_ENDERECO']     = $this->Endereco->nextVal('CO_ENDERECO');
                        $tel['CD_INST_LAB']     = $id;
                        $tel['ST_PRINCIPAL']    = $this->request->data['Endereco']['ST_PRINCIPAL'][$k];
                        $tel['TP_ENDERECO']     = $this->request->data['Endereco']['TP_ENDERECO'][$k];
                        $tel['NU_CEP']          = strtr($this->request->data['Endereco']['NU_CEP'][$k],array('.'=>'','-'=>''));
                        $tel['CD_CID']          = $this->request->data['Endereco']['CD_CID'][$k];
                        $tel['DS_LOGRADOURO']   = $this->request->data['Endereco']['DS_LOGRADOURO'][$k];
                        $tel['DS_BAIRRO']       = $this->request->data['Endereco']['DS_BAIRRO'][$k];
                        if (!$this->Endereco->save($tel, false)) {
                            Throw new Exception("Erro ao cadastrar o endereco");
                        }
                    }
                }

                $dataSource->commit();
                $this->Session->setFlash("Dados cadastrados com sucesso");
                $this->redirect(array('action' => 'visualizar/'.$id));
            }else {
                //COMBO UF
                $this->loadModel('Uf');
                $this->set('arrUF', $this->Uf->getCombo(array('CD_UF', 'NM_UF')));

                //COMBO CIDADE
                $this->loadModel('Cidade');
                $this->set('arrCidade', $this->Cidade->getCombo(array('CD_CID', 'NM_CID')));

                //COMBO PAIS
                $this->loadModel('Pais');
                $this->set('arrPais', $this->Pais->getCombo(array('CD_PAIS', 'NM_PAIS')));

                //LISTA DE TELEFONES
                $this->loadModel('Telefone');
                $arrTel = array();
                $options = array('conditions' => array('Telefone.CD_INST_LAB' => $id));
                $resultTel = $this->Telefone->find('all', $options);
                if(!empty ($resultTel)) {
                    foreach ($resultTel as $v) {
                        $arrTel[] = $v['Telefone'];
                    }
                }
                //$this->set('telefones', $arrTel);
                $this->request->data['TELEFONES'] = $arrTel;

                //LISTA DE TELEFONES
                $this->loadModel('Endereco');
                $arrEnd = array();
                $resultEnd = $this->Endereco->find('all', array(
                        'joins' => array(
                                array(
                                        'table' => 'CIDADE',
                                        'alias' => 'Cidade',
                                        'type' => 'INNER',
                                        'conditions' => array(
                                                'Endereco.CD_CID = Cidade.CD_CID'
                                        )
                                ),
                                array(
                                        'table' => 'UF',
                                        'alias' => 'Uf',
                                        'type' => 'INNER',
                                        'conditions' => array(
                                                'Cidade.CD_UF = Uf.CD_UF'
                                        )
                                ),
                                array(
                                        'table' => 'PAIS',
                                        'alias' => 'Pais',
                                        'type' => 'INNER',
                                        'conditions' => array(
                                                'Cidade.CD_PAIS = Pais.CD_PAIS'
                                        )
                                )
                        ),
                        'conditions' => array('Endereco.CD_INST_LAB' => $id)
                        ,
                        'fields' => array("Endereco.CO_ENDERECO","Endereco.TP_ENDERECO", "Endereco.NU_CEP",
                                "Endereco.ST_PRINCIPAL", "Cidade.CD_CID", "Cidade.NM_CID",
                                "Uf.CD_UF", "Uf.NM_UF",
                                "Pais.CD_PAIS", "Pais.NM_PAIS",
                                "Endereco.DS_LOGRADOURO", "Endereco.DS_BAIRRO")
                ));
                if(!empty ($resultEnd)) {
                    foreach ($resultEnd as $v) {
                        $arr["CO_ENDERECO"]    = $v["Endereco"]["CO_ENDERECO"];
                        $arr["ST_PRINCIPAL"]   = $v["Endereco"]["ST_PRINCIPAL"];
                        $arr["TP_ENDERECO"]    = $v["Endereco"]["TP_ENDERECO"];
                        $arr["NU_CEP"]         = $v["Endereco"]["NU_CEP"];
                        $arr["CD_CID"]         = $v["Cidade"]["CD_CID"];
                        $arr["NM_CID"]         = $v["Cidade"]["NM_CID"];
                        $arr["DS_LOGRADOURO"]  = $v["Endereco"]["DS_LOGRADOURO"];
                        $arr["DS_BAIRRO"]      = $v['Endereco']["DS_BAIRRO"];
                        $arr["CD_UF"]          = $v["Uf"]["CD_UF"];
                        $arr["NM_UF"]          = $v["Uf"]["NM_UF"];
                        $arr["CD_PAIS"]        = $v["Pais"]["CD_PAIS"];
                        $arr["NM_PAIS"]        = $v["Pais"]["NM_PAIS"];
                        $arrEnd[] = $arr;
                    }
                }
                //$this->set('enderecos', $arrEnd);
                $this->request->data['ENDERECOS'] = $arrEnd;

                $this->set('id',$id);
            }
        }catch(Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash("Ocorreu um erro ao cadastrar as informações");
            $this->redirect(array('action' => 'visualizar/'.$id));
        }
    }

    public function servicos($id) {
        $this->layout = false;
        $this->loadModel('Servico');
        $this->loadModel('RelacionamentoInstituicaoServico');
        try {

            $arrServicosMar = $this->RelacionamentoInstituicaoServico->find('all', array(
                        'fields' => array("RelacionamentoInstituicaoServico.CO_SERVICO"),
                        'conditions' => array('RelacionamentoInstituicaoServico.CD_INST_LAB' => $id)
            ));
            $arrServicosMarcados = array();
            if(!empty ($arrServicosMar)) {
                foreach ($arrServicosMar as $k => $v) {
                    $arrServicosMarcados[] = $v['RelacionamentoInstituicaoServico']['CO_SERVICO'];
                }
            }
            $this->set('arrServicosMarcados', $arrServicosMarcados);

            if($this->request->is('post')) {

                if(!empty ($this->request->data['servicos'])) {
                    $dataSource = $this->RelacionamentoInstituicaoServico->getDataSource();
                    $dataSource->begin();

                    foreach($this->request->data['servicos'] as $s) {
                        if(!in_array($s, $arrServicosMarcados)){
                            $arrSer = array();
                            $arrSer["CO_SERVICO"] = $s;
                            $arrSer["CD_INST_LAB"] = $id;
                            $arrSer["ST_SERVICO"] = "A"; //A ou I
                            $arrSer["DT_ATIV_LOGISTICA"] = date('Y-m-d');//date("d/m/Y");
                            $this->RelacionamentoInstituicaoServico->save($arrSer);
                        }
                    }
                    $this->Session->setFlash("Serviços salvos com sucesso");
                    $dataSource->commit();
                    $this->redirect(array('action' => 'visualizar/'.$id));
                }
            }else {
                $resultSer = $this->Servico->find('all', array('fields' => array("Servico.CO_SERVICO","Servico.DS_SERVICO") ));
                if(!empty ($resultSer)) {
                    foreach ($resultSer as $k => $v) {
                        $arrServicos[$v['Servico']['CO_SERVICO']] = $v['Servico']['DS_SERVICO'];
                    }
                }
                $this->set('arrServicos', $arrServicos);
                
            }

            $this->set('id',$id);
        }catch (Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash("Ocorreu um erro ao cadastrar os serviços");
            $this->redirect(array('action' => 'visualizar/'.$id));
        }
    }

    public function resptecnicos($id) {

        $this->layout = false;
        $this->loadModel('Servico');
        $this->loadModel('ResponsavelInstituicaoServico');

        $dataSource = $this->ResponsavelInstituicaoServico->getDataSource();
        try {
            if($this->request->is('post')) {
                if(!empty ($this->request->data['resptecnicos'])) {
                    $dataSource->begin();
                    foreach($this->request->data['resptecnicos'] as $r) {
                        $arrRes = array();
                        $conselho = explode("=", $r);
                        $arrRes["NU_CONSELHO"] = $conselho[0];
                        $arrRes["UF_CONSELHO"] = $conselho[1];
                        $arrRes["CD_INST_LAB"] = $id;
                        $arrRes["CO_SERVICO"] = $this->request->data['ResponsavelInstituicaoServico']['CO_SERVICO'];
                        $arrRes["ST_RESP"] = "A";//A ou I
                        $this->ResponsavelInstituicaoServico->save($arrRes);

                        $this->Session->setFlash("Responsável salvos com sucesso");
                    }
                    $dataSource->commit();
                    $this->redirect(array('action' => 'visualizar/'.$id));
                }
            }else {

                $arrRespTec = array();
                $this->loadModel('ResponsavelTecnicoLibExame');
                $arrRT = $this->ResponsavelTecnicoLibExame->find('all', array(
                                                                'joins' => array(
                                                                        array(
                                                                                'table' => 'TB_CNSUS_RESP',
                                                                                'alias' => 'TB_CNSUS_RESP',
                                                                                'type' => 'INNER',
                                                                                'conditions' => array(
                                                                                        'ResponsavelTecnicoLibExame.NU_CONSELHO = TB_CNSUS_RESP.NU_CONSELHO',
                                                                                        'ResponsavelTecnicoLibExame.UF_CONSELHO = TB_CNSUS_RESP.UF_CONSELHO',
                                                                                )
                                                                        )
                                                                ),
                                                                'fields' => array("ResponsavelTecnicoLibExame.NU_CONSELHO","ResponsavelTecnicoLibExame.UF_CONSELHO",
                                                                        "ResponsavelTecnicoLibExame.NO_RESPONSAVEL")
                                                                ));
                
                if(!empty ($arrRT)) {
                    foreach ($arrRT as $k => $v) {
                        $arrRespTec[$v['ResponsavelTecnicoLibExame']['NU_CONSELHO']."=".$v['ResponsavelTecnicoLibExame']['UF_CONSELHO']] = $v['ResponsavelTecnicoLibExame']['NO_RESPONSAVEL'];
                    }
                }
                $this->set('arrRespTec', $arrRespTec);

                $arrRespTecMarcados = array();
                $this->loadModel('ResponsavelInstituicaoServico');
                $arrRTMarcados = $this->ResponsavelInstituicaoServico->find('all', array(
                        'fields' => array("ResponsavelInstituicaoServico.NU_CONSELHO","ResponsavelInstituicaoServico.UF_CONSELHO"),
                        'conditions' => array("ResponsavelInstituicaoServico.CD_INST_LAB " => $id)
                ));
                if(!empty ($arrRTMarcados)) {
                    foreach ($arrRTMarcados as $k => $v) {
                        $arrRespTecMarcados[] = $v['ResponsavelInstituicaoServico']['NU_CONSELHO']."=".$v['ResponsavelInstituicaoServico']['UF_CONSELHO'];
                    }
                }
                $this->set('arrRespTecMarcados', $arrRespTecMarcados);

                $this->loadModel('RelacionamentoInstituicaoServico');
                $servicos = $this->RelacionamentoInstituicaoServico->find('all', array(
                                                                         'joins' => array(
                                                                                        array(
                                                                                                'table' => 'TB_SERVICO',
                                                                                                'alias' => 'TB_SERVICO',
                                                                                                'type' => 'INNER',
                                                                                                'conditions' => array(
                                                                                                        'TB_SERVICO.CO_SERVICO = RelacionamentoInstituicaoServico.CO_SERVICO'
                                                                                                )
                                                                                        )
                                                                                    ),
                                                                        'fields' => array("TB_SERVICO.CO_SERVICO", "TB_SERVICO.DS_SERVICO"),
                                                                        'conditions' => array("RelacionamentoInstituicaoServico.CD_INST_LAB " => $id)
                                                                        )
                        );

                $arrServico = array('' => 'Selecione um item');
                if(!empty($servicos)){
                    foreach ($servicos as $v) {
                        $arrServico[$v['TB_SERVICO']['CO_SERVICO']] = $v['TB_SERVICO']['DS_SERVICO'];
                    }
                }
                $this->set('arrServicos', $arrServico);

            }

            $this->set('id',$id);
        }catch (Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash("Ocorreu um erro ao cadastrar o responsável");
            $this->redirect(array('action' => 'visualizar/'.$id));
        }

        $this->set('id',$id);
    }

    public function novoresptecnicos($id) {
        $this->layout = false;
        $this->loadModel('CBO');
        $this->set('arrCBO', $this->CBO->getCombo(array('CD_CBO','DS_CBO')));

        $this->loadModel('Uf');
        $this->set('arrUF', $this->Uf->getCombo(array('CD_UF', 'NM_UF')));        
        
        try {
            if($this->request->is('post')) {//CADASTRO
                $this->loadModel('ResponsavelTecnicoLibExame');
                $dataSource = $this->ResponsavelTecnicoLibExame->getDataSource();
                $dataSource->begin();

                if($this->ResponsavelTecnicoLibExame->save($this->request->data["ResponsavelTecnicoLibExame"], false)) {
                    if(!empty ($this->request->data['CnsusResp'])) {
                        $this->loadModel('CnsusResp');
                        $c = 0;
                        foreach($this->request->data['CnsusResp']['TP_CNSUS'] as $v) {

                            $arr = array();
                            $arr['NU_CONSELHO'] = $this->request->data['ResponsavelTecnicoLibExame']['NU_CONSELHO'];
                            $arr['UF_CONSELHO'] = $this->request->data['ResponsavelTecnicoLibExame']['UF_CONSELHO'];
                            $arr['CNSUS_RESP']  = $this->request->data['CnsusResp']['CNSUS_RESP'][$c];
                            $arr['TP_CNSUS']    = !empty ($v) ? $v : 'P';//P ou D
                            $arr['ST_CNSUS']    = "A";// A ou I
                            $c++;
                            if(!$this->CnsusResp->save($arr, false)) {
                                throw new Exception;
                            }
                        }
                    }
                }else {
                    throw new Exception;
                }
                $this->set('id', $id);
                $dataSource->commit();
                echo'true';
                exit;
            }

            $this->set('id', $id);
        }catch (Exception $e) {
            $dataSource->rollback();
            echo'false';
            exit;
        }
    }

    public function novocontato($id) {
        $this->layout = false;

        $this->loadModel('Funcao');
        $this->set('arrFuncao', $this->Funcao->getCombo(array('CO_FUNCAO', 'DS_FUNCAO')));

        $this->loadModel('Servico');
        $this->set('arrServico', $this->Servico->getCombo(array('CO_SERVICO', 'DS_SERVICO')));

        $this->loadModel('RelacionamentoContatoInsLabServico');
        $dataSource = $this->RelacionamentoContatoInsLabServico->getDataSource();
        try {
            if($this->request->is('post')) {
                $dataSource->begin();

                $this->request->data['RelacionamentoContatoInsLabServico']['CD_INST_LAB'] = $id;
                $this->request->data['RelacionamentoContatoInsLabServico']['ST_CONTATO'] = 'A';
                if(!$this->RelacionamentoContatoInsLabServico->save($this->request->data['RelacionamentoContatoInsLabServico'])) {
                    throw new Exception;
                }

                if (!empty($this->request->data['Telefone'])) {
                    $idContatoInstLab = $this->RelacionamentoContatoInsLabServico->getLastInsertID();
                    $this->loadModel('Telefone');
                    foreach ($this->request->data['Telefone']['TP_TELEFONE'] as $k => $t) {
                        $tel['CO_TELEFONE'] = $this->Telefone->nextVal('CO_TELEFONE');
                        $tel['CO_SEQ_CONTATO_INST_LAB'] = $idContatoInstLab;
                        $tel['DDD_TELEFONE'] = $this->request->data['Telefone']['DDD_TELEFONE'][$k];
                        $tel['NU_TELEFONE'] = strtr($this->request->data['Telefone']['NU_TELEFONE'][$k], array('-' => ''));
                        $tel['ST_PRINCIPAL'] = (!empty($this->request->data['Telefone']['ST_PRINCIPAL'][$k])) ? $this->request->data['Telefone']['ST_PRINCIPAL'][$k] : 'N';
                        $tel['TP_TELEFONE'] = $this->request->data['Telefone']['TP_TELEFONE'][$k];
                        if (!$this->Telefone->save($tel, false)) {
                            Throw new Exception("Erro ao cadastrar o telefone");
                        }
                    }
                }

                $this->Session->setFlash("Contato salvo com sucesso");
                $dataSource->commit();
                $this->redirect(array('action' => 'visualizar/'.$id));
            }
        }catch (Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash("Ocorreu um erro ao cadastrar o contato");
            $this->redirect(array('action' => 'visualizar/'.$id));
        }

        $this->set('id',$id);
    }

    public function editarcontato($id, $idContato) {
        $this->layout = false;

        $this->loadModel('Funcao');
        $this->set('arrFuncao', $this->Funcao->getCombo(array('CO_FUNCAO', 'DS_FUNCAO')));

        $this->loadModel('Servico');
        $this->set('arrServico', $this->Servico->getCombo(array('CO_SERVICO', 'DS_SERVICO')));

        $this->loadModel('RelacionamentoContatoInsLabServico');
        $resultado = $this->RelacionamentoContatoInsLabServico->find('all', array(
                'conditions' => array("RelacionamentoContatoInsLabServico.CO_SEQ_CONTATO_INST_LAB " => $idContato)
        ));
        $this->set('arrContato', $resultado);

        $this->loadModel('Telefone');
        $arrTel = array();
        $options = array('conditions' => array('Telefone.CO_SEQ_CONTATO_INST_LAB' => $idContato));
        $resultTel = $this->Telefone->find('all', $options);
        if(!empty ($resultTel)) {
            foreach ($resultTel as $v) {
                $arrTel[] = $v['Telefone'];
            }
        }
        //$this->set('telefones', $arrTel);
        $this->request->data += array('TELEFONES' => $arrTel);

        $dataSource = $this->RelacionamentoContatoInsLabServico->getDataSource();
        try {
            if($this->request->is('post')) {
                $dataSource->begin();

                $this->request->data['RelacionamentoContatoInsLabServico']['CD_INST_LAB'] = $id;
                $this->request->data['RelacionamentoContatoInsLabServico']['ST_CONTATO'] = 'A';
                if(!$this->RelacionamentoContatoInsLabServico->save($this->request->data['RelacionamentoContatoInsLabServico'])) {
                    throw new Exception;
                }

                if (is_array($this->request->data['Telefone'])) {
                    $this->loadModel('Telefone');
                    $cdContatoInstLab = $this->RelacionamentoContatoInsLabServico->getLastInsertID();
                    foreach ($this->request->data['Telefone'] as $t) {
                        $tel['CO_TELEFONE'] = $this->Telefone->nextVal('CO_TELEFONE');
                        $tel['CO_SEQ_CONTATO_INST_LAB'] = $cdContatoInstLab;
                        $tel['DDD_TELEFONE'] = $t['DDD_TELEFONE'];
                        $tel['NU_TELEFONE'] = strtr($t['NU_TELEFONE'], array('-' => ''));
                        $tel['ST_PRINCIPAL'] = (!empty($t['ST_PRINCIPAL'])) ? $t['ST_PRINCIPAL'] : 'N';
                        $tel['TP_TELEFONE'] = $t['TP_TELEFONE'];
                        if (!$this->Telefone->save($tel, false)) {
                            Throw new Exception("Erro ao cadastrar o telefone");
                        }
                    }
                }

                $this->Session->setFlash("Contato atualizado com sucesso");
                $dataSource->commit();
                $this->redirect(array('action' => 'visualizar/'.$id));
            }
        }catch (Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash("Ocorreu um erro ao atualizar o contato");
            $this->redirect(array('action' => 'visualizar/'.$id));
        }

        $this->set('id',$id);
        $this->set('idContato',$idContato);
    }

    public function getInstituicaoPorId($id) {
        return $this->InstituicaoLab->find('first', array(
                'joins' => array(
                        array(
                                'table' => 'TB_ENDERECO',
                                'alias' => 'TB_ENDERECO',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'INSTITUICAOLAB.CD_INST_LAB = TB_ENDERECO.CD_INST_LAB'
                                )
                        ),
                        array(
                                'table' => 'CIDADE',
                                'alias' => 'CIDADE',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'TB_ENDERECO.CD_CID = CIDADE.CD_CID'
                                )
                        )
                ),
                'conditions' => array('INSTITUICAOLAB.CD_INST_LAB' => $id)
                ,
                'fields' => array("INSTITUICAOLAB.CD_INST_LAB",
                        "INSTITUICAOLAB.NM_INST",
                        "INSTITUICAOLAB.NM_INST_CURTO",
                        "INSTITUICAOLAB.DS_EMAIL_PRINCIPAL",
                        "INSTITUICAOLAB.DS_EMAIL_SECUNDARIO",
                        "INSTITUICAOLAB.IM_FOTO",
                        "(SELECT '('+A.DDD_TELEFONE+')'+A.NU_TELEFONE AS [data()]
                        FROM TB_TELEFONE A
                        WHERE A.CD_INST_LAB = INSTITUICAOLAB.CD_INST_LAB
                        FOR XML PATH('')) as TELEFONES ",
                        "(SELECT B.DS_LOGRADOURO+' '+B.DS_BAIRRO+' '+B.NU_CEP+' '+C.NM_CID+'/'+D.NM_UF AS [data()]
                        FROM TB_ENDERECO B
                        INNER JOIN CIDADE C ON B.CD_CID = C.CD_CID
                        INNER JOIN UF D ON D.CD_UF = C.CD_UF
                        WHERE B.CD_INST_LAB = INSTITUICAOLAB.CD_INST_LAB
                        FOR XML PATH('')) as ENDERECOS ")
                )
        );
    }


    public function getListaServicosInstuticaoPorId($id) {
        $this->loadModel('RelacionamentoInstituicaoServico');
        return  $this->RelacionamentoInstituicaoServico->find('all', array(
                'joins' => array(
                        array(
                                'table' => 'TB_SERVICO',
                                'alias' => 'Servico',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'Servico.CO_SERVICO = RelacionamentoInstituicaoServico.CO_SERVICO'
                                )
                        ),
                        array(
                                'table' => 'TB_DOENCA',
                                'alias' => 'Doenca',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'Doenca.CO_DOENCA = Servico.CO_DOENCA'
                                )
                        )
                ),
                'fields' => array("RelacionamentoInstituicaoServico.CD_INST_LAB",
                        "RelacionamentoInstituicaoServico.CO_SERVICO","Servico.DS_SERVICO",
                        "RelacionamentoInstituicaoServico.DT_ATIV_LOGISTICA", "Doenca.DS_DOENCA",
                        "Servico.TP_SERVICO"),
                'conditions' => array('RelacionamentoInstituicaoServico.CD_INST_LAB' => $id)
        ));
    }

    public function getListaResponsaveisTecnicosInstuticaoPorId($id) {
        $this->loadModel('ResponsavelInstituicaoServico');
        return  $this->ResponsavelInstituicaoServico->find('all', array(
                'joins' => array(
                        array(
                                'table' => 'TB_RESPONSAVEL_TECNICO_LIB_EXAME',
                                'alias' => 'RESPONSAVELTECNICOLIBEXAME',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'RESPONSAVELTECNICOLIBEXAME.NU_CONSELHO = ResponsavelInstituicaoServico.NU_CONSELHO',
                                        'RESPONSAVELTECNICOLIBEXAME.UF_CONSELHO = ResponsavelInstituicaoServico.UF_CONSELHO'
                                )
                        ),
                        array(
                                'table' => 'TB_CNSUS_RESP',
                                'alias' => 'CNSUSRESP',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'ResponsavelInstituicaoServico.NU_CONSELHO = CNSUSRESP.NU_CONSELHO',
                                        'ResponsavelInstituicaoServico.UF_CONSELHO = CNSUSRESP.UF_CONSELHO'
                                )
                        ),
                        array(
                                'table' => 'CBO',
                                'alias' => 'CBO',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'RESPONSAVELTECNICOLIBEXAME.CD_CBO = CBO.CD_CBO'
                                )
                        ),
                        array(
                                'table' => 'UF',
                                'alias' => 'UF',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'RESPONSAVELTECNICOLIBEXAME.UF_CONSELHO = UF.CD_UF'
                                )
                        )
                ),
                'fields' => array("DISTINCT RESPONSAVELTECNICOLIBEXAME.NO_RESPONSAVEL",
                        "ResponsavelInstituicaoServico.NU_CONSELHO","UF.NM_UF",
                        "CBO.DS_CBO",
                        "(SELECT CN.CNSUS_RESP AS [data()]
                        FROM TB_CNSUS_RESP CN
                        WHERE CN.NU_CONSELHO = ResponsavelInstituicaoServico.NU_CONSELHO
                            AND CN.UF_CONSELHO = ResponsavelInstituicaoServico.UF_CONSELHO
                        FOR XML PATH('')) as CNSUS"),
                'conditions' => array('ResponsavelInstituicaoServico.CD_INST_LAB' => $id,
                        'ResponsavelInstituicaoServico.ST_RESP' => 'A')
        ));
    }

    public function getListaContatosUnidadePorId($id) {
        $this->loadModel('RelacionamentoContatoInsLabServico');
        return $this->RelacionamentoContatoInsLabServico->find('all', array(
                'joins' => array(
                        array(
                                'table' => 'TB_SERVICO',
                                'alias' => 'SERVICO',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'SERVICO.CO_SERVICO = RelacionamentoContatoInsLabServico.CO_SERVICO'
                                )
                        ),
                        array(
                                'table' => 'TB_FUNCAO',
                                'alias' => 'FUNCAO',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'FUNCAO.CO_FUNCAO = RelacionamentoContatoInsLabServico.CO_FUNCAO'
                                )
                        )
                ),
                'conditions' => array("RelacionamentoContatoInsLabServico.CD_INST_LAB " => $id,
                        "RelacionamentoContatoInsLabServico.ST_CONTATO = 'A'"),
                'fields' => array("RelacionamentoContatoInsLabServico.CO_SEQ_CONTATO_INST_LAB",
                        "RelacionamentoContatoInsLabServico.DS_EMAIL_PRINCIPAL",
                        "RelacionamentoContatoInsLabServico.DS_EMAIL_SECUNDARIO",
                        "RelacionamentoContatoInsLabServico.NO_FUNCIONARIO",
                        "SERVICO.DS_SERVICO","FUNCAO.DS_FUNCAO",
                        "(SELECT '('+A.DDD_TELEFONE+')'+A.NU_TELEFONE AS [data()]
                                                                                                FROM TB_TELEFONE A
                                                                                                WHERE A.CD_INST_LAB = RelacionamentoContatoInsLabServico.CD_INST_LAB
                                                                                                FOR XML PATH('')) as TELEFONES ")
                )
        );
    }

    public function getListaMedicosInstuticaoPorId($id) {
        $this->loadModel('RelacionamentoAutoPerfilInst');
        return $this->RelacionamentoAutoPerfilInst->find('all', array(
                'joins' => array(
                        array(
                                'table' => 'AUTORIZADO',
                                'alias' => 'Autorizado',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'RelacionamentoAutoPerfilInst.CD_LOGIN = Autorizado.CD_LOGIN'
                                )
                        ),
                        array(
                                'table' => 'MEDICO',
                                'alias' => 'Medico',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'Medico.CD_LOGIN = Autorizado.CD_LOGIN'
                                )
                        ),
                        array(
                                'table' => 'UF',
                                'alias' => 'Uf',
                                'type' => 'INNER',
                                'conditions' => array(
                                        'Uf.CD_UF = Medico.UF_CRM'
                                )
                        )
                ),
                'conditions' => array("RelacionamentoAutoPerfilInst.CD_INST_LAB" => $id),
                'fields' => array("Medico.NM_MEDIC","Medico.CPF_MEDIC","Medico.CD_CRM","Uf.NM_UF","Medico.IM_FOTO",
                        "(SELECT B.NM_INST AS [data()]
                                                                                                        FROM RL_AUTORIZADO_PERFIL_INST A, INSTITUICAO_LAB B
                                                                                                        WHERE A.CD_INST_LAB = B.CD_INST_LAB
                                                                                                                and A.CD_INST_LAB = RelacionamentoAutoPerfilInst.CD_INST_LAB
                                                                                                        FOR XML PATH('')) as UNIDADES")
                )
        );
    }

    public function verificaCNSUS($cnsus) {
        $this->loadModel('CnsusResp');
        $retono = array();
        $retorno['TOTAL'] = $this->CnsusResp->find('count',array(
                'conditions' => array("CnsusResp.CNSUS_RESP" => $cnsus))
        );

        print json_encode($retorno['TOTAL']);
        exit;
    }

    public function excluirContato($id) {
        try {
            $retorno['RETORNO'] = 'false';
            $this->loadModel('RelacionamentoContatoInsLabServico');
            $dataSource = $this->RelacionamentoContatoInsLabServico->getDataSource();
            $dataSource->begin();
            $arr['CO_SEQ_CONTATO_INST_LAB'] = $id;
            $arr['ST_CONTATO'] = 'I';
            if(!$this->RelacionamentoContatoInsLabServico->save($arr)) {
                throw new Exception;
            }
            $retorno['RETORNO'] = 'true';
            $dataSource->commit();
        }catch(Exception $e) {
            $dataSource->rollback();
        }
        print json_encode($retorno);
        exit;
    }
}